#ifndef COLAIMP_H
#define COLAIMP_H
#include "ColaHeapImp.h"
template <class T>
class ColaImp:public Iterable<T>
{
public:
	ColaImp(int tam);
	ColaImp(Puntero<ColaImp<T>>);
	~ColaImp(void);
	//pre: exista cola, un puntero a un elemento T
		
		//pre: Exista la cola
		void vaciar();
		//pos: vacia la cola

		//predicados

		//pre: Exista la cola
		bool esVacia();
		//pos:devuelve true si la cola esta vacia

		//pre: exista cola, un puntero a un elemento T
		bool desencolar(T&);
		//pos: devuelve true si se pudo conseguir el elemento, false en otro caso, apuntando la referencia a NULL, borra ese elemento.

		//pre: Exista la cola
		bool encolarConPrioridad(T,int);
		//pos: devuelve true si en caso de cola acotada esta no estaba llena
		virtual Puntero<Iterador<T>> ObtenerIterador() const ;

private:
	int maximo;
	NodoHeap<T> **heap;
	int tope;
};

#include "ColaImp.cpp"
#endif
